home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / UTIL / Acme Filters 2.3.2 folder.sit / Acme Filters 2.3.2 folder / Acme Filters 2.3.2 / Acme Filters オ / Sources / Acme Filters AE.c next >
Text File  |  1996-02-16  |  7KB  |  264 lines

  1. /**********************************************************************************************
  2.  * Program Name:  Acme Filters
  3.  *
  4.  * Module Name:   Acme Filters AE.c
  5.  *
  6.  * Description:      Apple Event code for Acme Filters.
  7.  *
  8.  * Author:        Eric V. Curtis
  9.  *
  10.  * History:
  11.  *        v1.0    29-May-1995  Created.
  12.  *
  13.  * Functions:     InstallAEHandlers()
  14.  *                GotRequiredParams()
  15.  *                DoRequiredSuite()
  16.  *                HandleOpenDoc()
  17.  **********************************************************************************************/
  18.  
  19.  
  20.  
  21. /************ I N C L U D E   F I L E S *******************************************************/
  22.  
  23. #include <stdio.h>
  24.  
  25. #include <AppleEvents.h>
  26. #include <GestaltEqu.h>
  27.  
  28. #include "Acme Filters AE.h"
  29. #include "Acme Filters.h"
  30. #include "ASCToMac.h"
  31. #include "Delete RF.h"
  32. #include "FindOriginal.h"
  33. #include "Rot13.h"
  34. #include "Tab2Space.h"
  35. #include "Touch.h"
  36. #include "TypeCreator.h"
  37.  
  38.  
  39.  
  40. /**********************************************************************************************
  41.  * Function Name:  InstallAEHandlers
  42.  *
  43.  * Description:    Install our apple event handlers.
  44.  *
  45.  * Parameters:     None.
  46.  *
  47.  * Return Value:   noErr if ok, error code otherwise.
  48.  **********************************************************************************************/
  49. void    InstallAEHandlers( void )
  50. {
  51.     // required events
  52.     AEInstallEventHandler( kCoreEventClass, kAEOpenApplication, NewAEEventHandlerProc( DoRequiredSuite ), 1, false );
  53.     AEInstallEventHandler( kCoreEventClass, kAEOpenDocuments,  NewAEEventHandlerProc( DoRequiredSuite ), 2, false );
  54.     AEInstallEventHandler( kCoreEventClass, kAEQuitApplication,  NewAEEventHandlerProc( DoRequiredSuite ), 4, false );
  55. }
  56.  
  57.  
  58.  
  59. /**********************************************************************************************
  60.  * Function Name:  GotRequiredParams
  61.  *
  62.  * Description:    Check for missed, but required, apple event parameters.
  63.  *
  64.  * Parameters:     event - the apple event currently being processed.
  65.  *
  66.  * Return Value:   noErr - no parameters were missed.
  67.  *                 errAEParamMissed - at least one parameter was missed.
  68.  *                 err - some other error occurred.
  69.  **********************************************************************************************/
  70. OSErr    GotRequiredParams( AppleEvent *event )
  71. {
  72.     OSErr        err;
  73.     DescType    returnedType;
  74.     Size        actualSize;
  75.     
  76.     err = AEGetAttributePtr( event, keyMissedKeywordAttr, typeWildCard,
  77.                              &returnedType, (Ptr)0L, (Size)0L, &actualSize );
  78.     
  79.     if ( err == errAEDescNotFound )
  80.     {
  81.         err = noErr;                    // we got all the data
  82.     }
  83.     else if ( err == noErr )
  84.     {
  85.         err = errAEParamMissed;            // we missed some data
  86.     }
  87.     
  88.     return ( err );
  89. }
  90.  
  91.  
  92.  
  93. /**********************************************************************************************
  94.  * Function Name:  DoRequiredSuite
  95.  *
  96.  * Description:    Handle the open and quit application apple events.
  97.  *
  98.  * Parameters:     Standard stuff.
  99.  *
  100.  * Return Value:   noErr if ok, error code otherwise.
  101.  **********************************************************************************************/
  102. pascal OSErr    DoRequiredSuite( AppleEvent *event, AppleEvent *reply, long refCon )
  103. {
  104. #pragma unused ( reply )
  105.     if ( refCon == 1 )                    // kAEOpenApplication
  106.     {
  107.         AboutBox( kStartTimeOut );
  108.         gAutoQuit = false;                // never autoquit if app was double-clicked
  109.     }
  110.     
  111.     if ( refCon == 2 )                    // kAEOpenDocuments
  112.     {
  113.         HandleOpenDoc( event );
  114.         if ( gAutoQuit ) gQuit = true;    // only autoquit if app launched via dragged files
  115.     }
  116.     
  117.     if ( refCon == 4 )                    // kAEQuitApplication
  118.     {
  119.         gQuit = true;
  120.     }
  121.     
  122.     return ( noErr );
  123. }
  124.  
  125.  
  126.  
  127. /**********************************************************************************************
  128.  * Function Name:  HandleOpenDoc
  129.  *
  130.  * Description:    Process an 'Open Documents' apple event.
  131.  *
  132.  * Parameters:     event  - the apple event to be processed
  133.  *
  134.  * Return Value:   noErr - everything went OK
  135.  *                 other - something strange is afoot
  136.  **********************************************************************************************/
  137. pascal OSErr    HandleOpenDoc( AppleEvent *event )
  138. {
  139.     OSErr        err;
  140.     AEDescList    docList;
  141.     long        count;
  142.     long        i;
  143.     long        ticks;
  144.     OSType        osType;
  145.     short        file;
  146.     OSType        selType, selCrea;
  147.     unsigned long    created = 0, modified = 0;
  148.     
  149.     AEKeyword    keyword;
  150.     DescType    returnedType;
  151.     FSSpec        thing;
  152.     Size        grow, actualSize;
  153.     
  154.     // compact our heap
  155.     MaxMem( &grow );
  156.     
  157.     err = AEGetParamDesc( event, keyDirectObject, typeAEList, &docList );
  158.     if ( err ) goto exit;
  159.     
  160.     err = GotRequiredParams( event );
  161.     if ( err ) goto fail;
  162.     
  163.     err = AECountItems( &docList, &count );
  164.     if ( err ) goto fail;
  165.     
  166.     // let the user choose a filter if the option key is down
  167.     if ( SpecialKeyDown( 0x3a ) && !gFromMenu )
  168.     {
  169.         err = ChooseDefault( false );
  170.     }
  171.     if ( err ) goto fail;
  172.     
  173.     // see if there's at least one file in the list
  174.     i = count;
  175.     do
  176.     {
  177.         err = AEGetNthPtr( &docList, i, typeFSS, &keyword, &returnedType, &thing, sizeof( FSSpec ), &actualSize );
  178.         if ( err ) goto fail;
  179.         i--;
  180.         file = GetFSSpecType( &thing );
  181.     } while ( i && !file );
  182.     
  183.     // no files found
  184.     if ( !file && (gConversionType != kFindOriginal) ) goto fail;
  185.     
  186.     // let the user specify a date if necessary
  187.     if ( (gConversionType == kTouch) && SpecialKeyDown( 0x3a ) )
  188.     {
  189.         err = PickDateTime( &thing, &created, &modified );
  190.     }
  191.     if ( err ) goto fail;
  192.     
  193.     // let the user specify a type and creator if necessary
  194.     if ( gConversionType == kTypeCreator )
  195.     {
  196.         err = PickTypeCreator( &thing, &selType, &selCrea );
  197.     }
  198.     if ( err ) goto fail;
  199.     
  200.     // always clear the cancel flag
  201.     gCancelReq = false;
  202.     
  203.     // process each thing in the list
  204.     if ( gConversionType != kFindOriginal) Progress( eCreate, count, nil, 0 );
  205.     Delay( 12, &ticks );
  206.     for ( i = 1; i <= count; i++ )
  207.     {
  208.         err = AEGetNthPtr( &docList, i, typeFSS, &keyword, &returnedType, &thing, sizeof( FSSpec ), &actualSize );
  209.         if ( err ) goto fail;
  210.         
  211.         osType = GetFileOSType( &thing );
  212.         file = GetFSSpecType( &thing );
  213.         
  214.         Progress( eFileName, 0, thing.name, 0 );
  215.         switch ( gConversionType )
  216.         {
  217.             case kTypeCreator:
  218.                 if ( file ) TypeCreator( &thing, selType, selCrea );
  219.                 break;
  220.             
  221.             case kTouch:
  222.                 if ( file ) Touch( &thing, created, modified );
  223.                 break;
  224.             
  225.             case kTab2Space:
  226.                 if ( osType == kTEXTType ) Tab2Space( &thing );
  227.                 break;
  228.             
  229.             case kRot13:
  230.                 if ( osType == kTEXTType ) Rot13( &thing );
  231.                 break;
  232.             
  233.             case kFindOriginal:
  234.                 FindOriginal( &thing );
  235.                 break;
  236.             
  237.             case kDeleteRF:
  238.                 if ( osType == kTEXTType ) DeleteRF( &thing );
  239.                 break;
  240.             
  241.             case kASCToMac:
  242.             default:
  243.                 if ( osType == kTEXTType ) ASCToMac( &thing );
  244.                 break;
  245.         }
  246.         Progress( eRemainPercent, count-i, nil, (short)((i/(float)count)*100.0) );
  247.         
  248.         if ( gCancelReq ) i = count+1;
  249.     }
  250.     Progress( eFileName, 0, "¥p", 0 );
  251.     Delay( 12, &ticks );
  252.     Progress( eDelete, 0, nil, 0 );
  253.     
  254. fail:
  255.     AEDisposeDesc( &docList );
  256.     
  257.     // reset the default conversion type
  258.     gConversionType = LoadFilterPrefs();
  259.     gFromMenu = false;
  260.     
  261. exit:
  262.     return ( err );
  263. }
  264.